import org.junit.Test;

import java.util.Arrays;

/**
 * 数组Array
 * 数组相当于一堆相同数据类型的数据；
 */

public class 数组 {
    //1.数组的定义：4种
    @Test
    public void testArray(){
        //注意：数组长度固定，不能改变
        int[] arr1=new int[4];//java推荐写法 动态初始化
        int arr2[]=new int[4];//c推荐写法java兼容 动态初始化
        int[] arr3={1,2,3};   //静态初始化数组，元素可以直接使用
        int[] arr4=new int[]{1,2,3};//动态初始化
        //数组：内部存的数据叫做元素？
        //从arr3中取出2的元素
        System.out.println(arr3[1]);
        //arr3的长度
        System.out.println(arr3.length);
      //  System.out.println(arr4[4]);//报错：ArrayIndexOutOfBoundsException
    }                              //报错原因：（数组下标越界异常）下标超出数组长度范围

    /**
     * 数组的迭代（遍历：输出所有元素的值）三种
     * 1.普通迭代方式：for
     * 2.增强for方式：（推荐），JDK1.5之后
     * 3.工具类：Arrays
     */
    @Test
    public void testIterate(){
        int[] arr={1,2,3,4};//静态初始化数组
          //  for (int i=0;i< arr.length;i++){//拿下数组标
         //     System.out.println(arr[i]);
        //
       //     }
          //增强for JDK1.5 遍历数组目的：拿元素值
          // for(int j:arr){     //增强for语法：（遍历数据类型 引用：数组名）
          //    System.out.println(j);
          //              }
      //工具类：Arrays.toString()直接打印数组元素值
      System.out.println(Arrays.toString(arr));
    }
    /**
     * 数组的扩容：数组长度是固定的，不可改变【可以使用扩容改变数组长度】
     */
    @Test
    public void testCppy(){
       //字符数组
       char[] arr={'唐','山'};  //想法：长度增加4
       //扩容：增加4个      克隆新的数组
        char[] temp=Arrays.copyOf(arr,4);
        arr=temp;
        arr[2]='工';
        arr[3]='业';
        System.out.println(arr);
                          }
    /**
     * 数组输出元素时，会有一些不同，【查看数据是否时数组】
     * 数据类型：基础数据类型＋引用类型
      */
    @Test
    public void testArrays(){
    //字符数组
    char[] china={'中','国'};
        System.out.println(china);//输出：中国          字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符数组自动拼接
        //数值数组
        int[] i={1,2};
        System.out.println(i);//输出：[I数据类型 @ 连接符 3d82c5f3地址值
    }
    /**
     * 冒泡排序：双for循环使用（外层for执行一次，执行全部）
     */
    @Test
    public void bubbleSort(){
        //静态初始化数组
        int[] arr={3,6,4,1};
        //外层for
        for(int i=0;i<arr.length-1;i++){
        //内层for控制次 j=3轮递减【3~1】次
        for (int j=0;j<arr.length-1-i;j++){
        //交换：创建第三方数组，接收【相邻元素】 数组名【下标】
            if(arr[j]>arr[j+1]){
                //创建第三方数组，接收  变量/数组名：temp
                int temp=arr[j];  //大的元素交给第三方变量保存
                arr[j]=arr[j+1];  //第二个元素交给第一个元素位置
                arr[j+1]=temp;    //保存第三方【大数】交给第二个元素
            }
        }

        }
        System.out.println(Arrays.toString(arr)); //输出数组【遍历数组】
    }

    @Test
    public void testSort(){
        int[] arr={3,6,4,1};
        //工具类Arrays.sout()方法排序，默认升序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
